const path = require('path');
const fs = require('fs');

// 支持多路径尝试加载模块，增强兼容性和错误提示
function customRequire(moduleName) {
    const tryPaths = [
        // 4. 插件自身 node_modules（如插件独立依赖）
        () => { const mod = require(path.join(__dirname, 'node_modules', moduleName)); console.log(`[customRequire] 通过插件自身 node_modules 加载: ${moduleName}`); return mod; },
        // 1. 标准 require
        () => { const mod = require(moduleName); console.log(`[customRequire] 通过标准 require 加载: ${moduleName}`); return mod; },
        // 2. Electron 打包后 app/node_modules
        () => { const mod = require(path.join(process.resourcesPath, 'app', 'node_modules', moduleName)); console.log(`[customRequire] 通过 process.resourcesPath/app/node_modules 加载: ${moduleName}`); return mod; },
        // 3. Electron 打包后 resources/node_modules（某些打包工具结构）
        () => { const mod = require(path.join(process.resourcesPath, 'node_modules', moduleName)); console.log(`[customRequire] 通过 process.resourcesPath/node_modules 加载: ${moduleName}`); return mod; },
        // 5. 绝对路径（如环境变量指定）
        () => { if(process.env["PLUGIN_EXTRA_MODULE_PATH"]){ const mod = require(path.join(process.env["PLUGIN_EXTRA_MODULE_PATH"], moduleName)); console.log(`[customRequire] 通过 PLUGIN_EXTRA_MODULE_PATH 加载: ${moduleName}`); return mod; } throw new Error('skip'); }
    ];
    let lastError = null;
    for (const tryFn of tryPaths) {
        try {
            return tryFn();
        } catch (e) {
            lastError = e;
        }
    }
    // 依赖缺失友好提示
    console.error(`无法加载模块 '${moduleName}'，请确认依赖已正确安装并未被asar压缩。最后错误: ${lastError && lastError.message}`);
    throw new Error(`无法加载模块 '${moduleName}'，请确认依赖已正确安装并未被asar压缩。最后错误: ${lastError && lastError.message}`);
}

// 可选：依赖完整性检测
function checkPluginDependencies(deps) {
    const missing = [];
    deps.forEach(dep => {
        try {
            customRequire(dep);
        } catch {
            missing.push(dep);
        }
    });
    if (missing.length > 0) {
        throw new Error('缺少依赖: ' + missing.join(', '));
    }
}

module.exports = { customRequire, checkPluginDependencies };